Skip to content

Refactored CommitAbility into TryCommitAbility. - #60

Merged
lextatic merged 10 commits into
mainfrom
feature/try-commit-ability
Aug 10, 2026
Merged

Refactored CommitAbility into TryCommitAbility.#60
lextatic merged 10 commits into
mainfrom
feature/try-commit-ability

Conversation

@lextatic

@lextatic lextatic commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Changed

  • Refactored Commit methods into a TryCommit pattern.
  • Updated CommitAbility node.
  • Renamed GrantAbilityAndActivateOnce node into TryGrantAbilityAndActivateOnce.

Added

  • Added AbilityHandle output to the TryGrantAbilityAndActivateOnce node.

Fixed

  • Fixed ability costs not considering percent modifiers for cost validation.

@lextatic lextatic added the changed Changes in existing functionality label Aug 9, 2026
@lextatic
lextatic requested a balanced review from Copilot August 9, 2026 23:41

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Refactors ability activation and commitment APIs to Try* patterns, adds commit failure routing, exposes transient ability handles, and corrects cost projection.

Changes:

  • Introduces TryCommitAbilityNode and fallible commit APIs.
  • Renames activation/grant APIs and adds lingering-handle output.
  • Updates cost validation, tests, and documentation.

Reviewed changes

Copilot reviewed 44 out of 44 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
Forge/Statescript/Providers/IAbilityActivationDataProvider.cs Adds granted-handle output.
Forge/Statescript/Providers/AbilityActivationDataProvider.cs Uses new Try APIs.
Forge/Statescript/Properties/AbilityActivatorResolver.cs Updates renamed node documentation.
Forge/Statescript/Properties/AbilityActivator.cs Forwards granted handles.
Forge/Statescript/Nodes/Condition/TryGrantAbilityAndActivateOnceNode.cs Renames node and adds handle output.
Forge/Statescript/Nodes/Condition/TryCommitAbilityNode.cs Adds conditional commit node.
Forge/Statescript/Nodes/Condition/TryActivateAbilityNode.cs Uses TryActivate.
Forge/Statescript/Nodes/Condition/CommitAbilityOperation.cs Moves enum to condition namespace.
Forge/Statescript/Nodes/Action/CommitAbilityNode.cs Removes obsolete action node.
Forge/Effects/Modifiers/Modifier.cs Removes old affordability helper.
Forge/Effects/EffectsManager.cs Removes old cost validation path.
Forge/Effects/Components/GrantAbilityEffectComponent.cs Uses TryActivate.
Forge/Core/EntityAbilities.cs Adds Try grant-and-activate APIs.
Forge/Abilities/AbilityHandle.cs Exposes Try activation and commit APIs.
Forge/Abilities/AbilityBehaviorContext.Data.cs Updates API reference.
Forge/Abilities/Ability.cs Adds commit validation and cost projection.
Forge.Tests/Statescript/Resolvers/AbilityDataResolverTests.cs Updates renamed API usage.
Forge.Tests/Statescript/Resolvers/AbilityActivatorResolverTests.cs Tests granted-handle output.
Forge.Tests/Statescript/Nodes/State/ListenerNodesTests.cs Updates activation calls.
Forge.Tests/Statescript/Nodes/GrantAbilityNodesTests.cs Tests renamed node and output.
Forge.Tests/Statescript/Nodes/Condition/TryCommitAbilityNodeTests.cs Covers conditional commits.
Forge.Tests/Statescript/Nodes/Condition/ExpressionNodeTests.cs Updates activation call.
Forge.Tests/Statescript/Nodes/Action/CommitAbilityNodeTests.cs Removes obsolete node tests.
Forge.Tests/Statescript/GraphAbilityBehaviorTests.cs Updates activation calls.
Forge.Tests/Samples/QuickStartTests.cs Updates sample API usage.
Forge.Tests/Helpers/StatescriptTestHelpers.cs Updates test helpers.
Forge.Tests/Effects/CancelAbilityTagsComponentTests.cs Updates activation calls.
Forge.Tests/Effects/BlockAbilityTagsComponentTests.cs Updates activation calls.
Forge.Tests/Abilities/EntityAbilitiesEventsTests.cs Updates event tests.
Forge.Tests/Abilities/AbilityBehaviorTests.cs Tests Try commits and transient handles.
Forge.Tests/Abilities/AbilitiesTests.cs Expands commit and cost validation coverage.
docs/statescript/resolvers/can-activate-ability-resolver.md Updates commit-node link.
docs/statescript/resolvers/ability-activator-resolver.md Documents renamed APIs.
docs/statescript/nodes/state/grant-ability-node.md Updates related-node link.
docs/statescript/nodes/condition/try-grant-ability-and-activate-once-node.md Documents renamed node and output.
docs/statescript/nodes/condition/try-commit-ability-node.md Documents new commit node.
docs/statescript/nodes/condition/try-activate-ability-node.md Documents TryActivate.
docs/statescript/nodes/condition/README.md Updates condition-node index.
docs/statescript/nodes/action/README.md Removes obsolete action listing.
docs/statescript/nodes/action/grant-ability-permanently-node.md Updates related-node link.
docs/statescript/nodes/action/commit-ability-node.md Removes obsolete documentation.
docs/statescript/ability-integration.md Updates integration guidance.
docs/quick-start.md Updates public API examples.
docs/abilities.md Documents Try APIs and cost behavior.
Suppressed comments (1)

Forge/Core/EntityAbilities.cs:350

  • The typed overload has the same shared-grant issue: IsValid remains true when another grant source owns the ability, even if this activation failed or already ended. This can expose an inactive handle as the transient proc output; require both successful activation and an active handle.
		grantedAbility = abilityHandle.IsValid ? abilityHandle : null;

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread Forge/Core/EntityAbilities.cs Outdated
Comment thread Forge/Abilities/Ability.cs Outdated
Comment thread Forge/Statescript/Nodes/Condition/TryCommitAbilityNode.cs
@lextatic
lextatic merged commit 8f3d500 into main Aug 10, 2026
1 check passed
@lextatic
lextatic deleted the feature/try-commit-ability branch August 10, 2026 00:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

changed Changes in existing functionality

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants